package br.com.sms.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.sms.conexao.Conexao;
import br.com.sms.dominio.MalaDireta;
import br.com.sms.dominio.Mensagem;

public class MalaDiretaDao {
	
	private EntityManager manager;
	private Conexao conexao;
	
	public MalaDiretaDao(){
		if(conexao == null)
			conexao = new Conexao();
	}
	
	public MalaDireta salvar(MalaDireta malaDireta){
		manager = conexao.getEntityManger();
		manager.getTransaction().begin();
		if(malaDireta.getId() > 0){
			MalaDireta malaDireta2 = manager.find(MalaDireta.class, malaDireta.getId());
			malaDireta2.setDataCriacao(malaDireta.getDataCriacao());
			malaDireta2.setDataEnvioMalaDireta(malaDireta.getDataEnvioMalaDireta());
			malaDireta2.setDestinatarios(malaDireta.getDestinatarios());
			malaDireta2.setMensagem(malaDireta.getMensagem());
			malaDireta2.setTipo(malaDireta.getTipo());
			manager.merge(malaDireta);
		}else{
			manager.persist(malaDireta);
		}
		manager.getTransaction().commit();
		conexao.finalizaConexao();
		return malaDireta;
	}
	
	@SuppressWarnings("unchecked")
	public List<MalaDireta> recuperarMalas(Mensagem mensagem){
		manager = conexao.getEntityManger();
		Query query = manager.createQuery("select m from MalaDireta m where m.mensagem.id = :id ");
		query.setParameter("id", mensagem.getId());
		List<MalaDireta> lista = query.getResultList();
		conexao.finalizaConexao();
		return lista;
	}
	
	public void excluir(MalaDireta malaDireta){
		manager = conexao.getEntityManger();
		malaDireta = manager.find(MalaDireta.class, malaDireta.getId());
		manager.getTransaction().begin();
		manager.remove(malaDireta);
		manager.getTransaction().commit();
		conexao.finalizaConexao();
	}
	
	
	public MalaDireta recuperarMalaDireta(MalaDireta direta){
		manager = conexao.getEntityManger();
		MalaDireta mala = manager.find(MalaDireta.class, direta.getId());
		conexao.finalizaConexao();
		return mala;
	}
	
	@SuppressWarnings("unchecked")
	public List<MalaDireta> recuperarMalasDiretas(boolean isEnviada){
		String sql = null;
		
		if(isEnviada)
			sql = "select m from MalaDireta m where m.dataEnvioMalaDireta is not null";
		else
			sql = "select m from MalaDireta m where m.dataEnvioMalaDireta is null";
		
		manager = conexao.getEntityManger();
		Query query = manager.createQuery(sql);
		List<MalaDireta> lista = query.getResultList();
		conexao.finalizaConexao();
		return lista;
	}
}
